# 文件名: app/utils/logging_config.py
import os
import logging
from logging.handlers import RotatingFileHandler


def setup_logging(log_dir='logs'):
    """设置应用日志，支持日志轮转"""
    # 确保日志目录存在
    os.makedirs(log_dir, exist_ok=True)

    # 创建日志格式
    log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # 创建根日志记录器
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.INFO)

    # 清除现有的处理器
    for handler in root_logger.handlers[:]:
        root_logger.removeHandler(handler)

    # 添加控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(log_format)
    root_logger.addHandler(console_handler)

    # 添加文件处理器，支持日志轮转
    # 每个日志文件最大10MB，保留10个备份文件
    file_handler = RotatingFileHandler(
        os.path.join(log_dir, 'app.log'),
        maxBytes=1 * 1024 * 1024,  # 1MB
        backupCount=10,
        encoding='utf-8'
    )
    file_handler.setFormatter(log_format)
    root_logger.addHandler(file_handler)

    # 单独配置一个处理器用于错误日志
    error_handler = RotatingFileHandler(
        os.path.join(log_dir, 'error.log'),
        maxBytes=1 * 1024 * 1024,  # 1MB
        backupCount=10,
        encoding='utf-8'
    )
    error_handler.setFormatter(log_format)
    error_handler.setLevel(logging.ERROR)  # 只捕获ERROR及以上级别的日志
    root_logger.addHandler(error_handler)

    # 配置hypercorn和uvicorn日志
    for logger_name in ['hypercorn', 'hypercorn.error', 'uvicorn', 'uvicorn.error']:
        logger = logging.getLogger(logger_name)
        logger.handlers = []  # 清除现有的处理器
        logger.propagate = True  # 允许日志传递给根记录器

    # 返回配置好的日志记录器
    return root_logger


# 创建默认日志记录器
logger = setup_logging()